iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

TypeScript 從0開始系列 第 16

D16 - JS Array (2)

  • 分享至 

  • xImage
  •  

Manipulate array

  • Array.prototype@@iterator

    let array = [0.1, 2, "345", {six: 6}, [{key: 6},{key: 7},{key: 8}], 9]
    
    const iterator = array[Symbol.iterator]()
    
    for (const value of iterator) {
    	console.log(value)
    }
    
    // 有點類似 python for ... in ... 
    // 就可以不用老是用代index去取值
    
  • Array.prototype.at()

    let array = [0.1, 2, "345", {six: 6}, [{key: 6},{key: 7},{key: 8}], 9]
    console.log(array.at(0)) // 0.1
    console.log(array.at(-1)) // 9
    console.log(array.at(20)) // 超過範圍則回傳undefined
    
    // 可以傳入正負整數,負的就是從尾巴往前算
    // 相比於 array[0], array[1], ... 這樣的取值方式,at()提供更靈活的操控方式
    // 另外: array[-1] 會得到這個array的長度
    // 有點類似 python array[-1]的概念
    
  • Array.prototype.concat()

    // 串接一至多個array
    let array = [0.1, 2, "345", {six: 6}, [{key: 6},{key: 7},{key: 8}], 9]
    
    let array1 = [0.1, 2, "345"]
    let array2 = [{six: 6}]
    let array3 = [[{key: 6},{key: 7},{key: 8}]]
    let array4 = [9]
    
    const concat1_2 = array1.concat(array2)
    console.log(concat1_2)
    
    const concat1_2_3_4 = array1.concat(array2, array3, array4)
    console.log(concat1_2_3_4)
    
    console.log(array)
    
    console.log(array === concat1_2_3_4)
    
    
    > Array [0.1, 2, "345", Object { six: 6 }]
    > Array [0.1, 2, "345", Object { six: 6 }, Array [Object { key: 6 }, Object { key: 7 }, Object { key: 8 }], 9]
    > Array [0.1, 2, "345", Object { six: 6 }, Array [Object { key: 6 }, Object { key: 7 }, Object { key: 8 }], 9]
    > false
    
    // 即便 array 與 concat1_2_3_4 內容相同,但兩者的記憶體位置不同,不能用一般的 operator 辨識兩者是否有同樣的內容
    
  • Array.prototype.copyWithin()

    // copyWithin(target, start)
    // copyWithin(target, start, end)
    
    let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    console.log(array.copyWithin(0, 6))
    // array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    //                            ^^^^^^^^^^
    // > Array [6, 7, 8, 9, 4, 5, 6, 7, 8, 9]
    //          ^^^^^^^^^^
    
    console.log(array.copyWithin(0, 2, 8))
    // > Array [6, 7, 8, 9, 4, 5, 6, 7, 8, 9]  <-- array 已經改變了
    //                ^^^^^^^^^^^^^^^^
    // > Array [8, 9, 4, 5, 6, 7, 6, 7, 8, 9]
    //          ^^^^^^^^^^^^^^^^
    
  • Array.prototype.entries()

    // 回傳 [key, value] 形式的 iterator
    
    const array = ['a', 'b', 'c'];
    
    const iterator = array.entries();
    
    // 用前幾天學到的 array destructuring 拆開 key n value
    for (const [key, value] of iterator) { 
      	console.log(`array[${key}]=${value}`)
    }
    
  • Array.prototype.every()

    // every(callbackFn)
    // every(callbackFn, thisArg)
    
    // 給定一個test function
    // 檢查 array 中的每一個 element 經過 test function 是否回傳 true
    
    let array1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    let array2 = [0, 1, "2", 3, 4, "5", 6, 7, 8, 9]
    
    function isNumber(item) {
    	if (typeof(item) === "number") return true;
    	else return false;
    }
    
    console.log(array1.every(isNumber)) // true
    console.log(array2.every(isNumber)) // false
    
    // 精簡1
    function isNumber2(item) {
    	return typeof(item) === "number"
    }
    
    // 精簡2
    const isNumber = (item) => {return typeof(item)==="number"}
    

上一篇
D15 - JS Array (1)
下一篇
D17 - JS Array (3)
系列文
TypeScript 從0開始21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言